/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sisgp;

import dao.ProdutoDAO;
import dao.ProdutoMateriaPrimaDAO;
import java.util.List;
import java.util.Scanner;
import model.Familia;
import model.MateriaPrima;
import model.Produto;
import model.ProdutoMateriaPrima;

/**
 *
 * @author Sandro
 */
public class SisCodificacao {
    
    public String geraCodificacao(Familia familia, MateriaPrima materiaprima, String cor){
        
        
        String codParcial = "";
        String sequencialStr;
        
        codParcial = familia.getSigla().toUpperCase()+materiaprima.getSigla().toUpperCase()+cor.toUpperCase();
        
        sequencialStr = sequencialProd(codParcial);
        
        codParcial += sequencialStr;
        
        return codParcial;
        
    }
    
    private String sequencialProd(String codigo_parcial){
        String sequencialStr = "";
        List<Produto> lista = dao.findEqualId(codigo_parcial);
        int sequencial = 0;
        for(Produto p : lista){
            
            sequencial +=1;
            
        }
        
        if(sequencial >=0 && sequencial <=8){
            sequencialStr = "0"+(sequencial+1);
        }
        else
        {
            sequencialStr = ""+(sequencial+1);
        }
 
        return sequencialStr;
        
    }
    
    public String getNivel(ProdutoMateriaPrima pmp){
        
        String nivelFinal = "";
        String nivel= pmp.getNivel();
        String maiorNivel = "";
        
       // msg.Info(pmp.getProduto().getCodigo() + " - " +pmp.getCodigo(), "infos :P");
        
        List<ProdutoMateriaPrima> listaNiveis = pmpDAO.findNiveis(pmp.getProduto().getCodigo(), pmp.getCodigo());

        //msg.Info("getNivel = "+nivel, "o que vem por parametro");

        String numero="";
        
        //for(ProdutoMateriaPrima v : listaNiveis){
            //msg.Info("o que tem no for = "+v.getNivel(), "bruxa baratuxa");
            //maiorNivel = v.getNivel();
            //break;
        //}
        
        for(ProdutoMateriaPrima v : listaNiveis){
           // msg.Info("nivel = "+v.getNivel(), "bruxa baratuxa");
            maiorNivel = v.getNivel();
            break;
        }
        
        //msg.Info("maior numero = "+maiorNivel, "o xenti");
        
        //if(nivel.equals("0") && maiorNivel == ""){
        
            //int inicialS = Integer.parseInt(maiorNivel.substring(0,1))+1;
           // nivelFinal = "1.0";
          //  return nivelFinal;
        
        //}
        
        if(maiorNivel.trim().equals("")){
            
            //msg.Info("entrou nesse if cacete!", "teste");
            
            int indexNivel = nivel.length()-1;
            
           // msg.Info("tamanho = "+nivel.length() + " indice = "+indexNivel, nivel);
            
            if("0".equals(""+nivel.charAt(indexNivel))){
                
               // msg.Erro("é disso que o brasil gosta!", "^^");
                
                nivelFinal = nivel.substring(0, indexNivel-1)+".1";
                
            }
            else{
                //msg.Erro("passou reto :P", "uahsuhasuhu");
                nivelFinal = nivel+".1";
            }
            
            return nivelFinal;
        }
        
        //msg.Warning("maior nivel encontrado = "+maiorNivel, "maior nivel");
        
        String nivelInvert = reverseStr(maiorNivel);
        
        int tamanho = nivelInvert.length();
        int indicePonto = 0;        
                
        //msg.Info(nivelInvert, "nivelInvert");
        

        
        if(nivel.equals("0")){
        
            //msg.Info("Entrou nesse if - 1", "teste");
            
            int inicialS = Integer.parseInt(maiorNivel.substring(0,1))+1;
            nivelFinal = inicialS+".0";
        
        }
        else{
            for(int i = 0; i < nivelInvert.length(); i++) {
            
                String caracter = nivelInvert.charAt(i)+"";
                
               // msg.Info(""+caracter, "hue");
                
                if(caracter.trim().equals(".")){

                   indicePonto = i;
                   break;

                }
                else{
                    numero += caracter;
                }
            }
            
            //msg.Info(numero, "numero 0");
            
            
            //StringBuffer invertNum = new StringBuffer(numero);
            
            numero = reverseStr(numero);
            
            //msg.Warning(numero, "numero 1");
            
            int novoSeq = Integer.parseInt(numero);
            
            novoSeq += 1;
            
            //StringBuffer numerorev = new StringBuffer(""+novoSeq);
            
            numero = reverseStr(""+novoSeq);
            
            //msg.Warning(numero, "numero 2");
            
            String nivelFinalrev;
            
            if(nivel.length() == 3){
                if (""+nivel.charAt(2) == "0"){
                    nivelFinalrev = numero+nivelInvert.substring(indicePonto, tamanho-1);
                   // msg.Info("deveria ser esse if", "^^");
                }else
                {
                    nivelFinalrev = numero+nivelInvert.substring(indicePonto, tamanho);
                   // msg.Info("mas entrou nesse :P", "uu'");
                }
                
            }
            else{
                nivelFinalrev = numero+nivelInvert.substring(indicePonto, tamanho);
            }
            
            
            //msg.Warning(nivelFinalrev, "nivelFinalrev");
            
            //StringBuffer numerorevrev = new StringBuffer(nivelFinalrev);
            
            nivelFinal = reverseStr(nivelFinalrev);
            
            //msg.Info(nivelFinal,"finallll");
            
            
        }
  
        return nivelFinal;
        
    }
    
    private String reverseStr(String texto){
        
        String inverso = "";
        
        int tamanho = texto.length()-1;
        
        for(int i = 0; i < texto.length(); i++) {
            
            String caracter = texto.charAt(i)+"";
            
            //msg.Info(caracter+"", "for");
            
            inverso = caracter+inverso;
                
        }
        
        return inverso;
        
    }
    
    ProdutoDAO  dao = new ProdutoDAO();
    ProdutoMateriaPrimaDAO pmpDAO = new ProdutoMateriaPrimaDAO();
            
    SisMsg msg = new SisMsg();
    
}
